function incrementeTimer(){
	/*gestion des actions à chaque fréquence du timer : déplacement des objets,
	calculs des trajectoires, actualisation de l'écran, prolongement de l'expiration */
    if(v["constantes"].start){
        move();
        if(v["joueur"].bSaute){
            calculSaut("joueur", true);
        }
        if(v["joueur-dist"].bSaute){
            calculSaut("joueur-dist", true);
        }
	
        gestionCollision();
        var tabJoueur = new Array("joueur", "joueur-dist");
        for(j in tabJoueur)
            {
                var joueur = tabJoueur[j];
                if(v[joueur].bSaute && v[joueur].y <= v["constantes"]["posYinit"]){
                    v[joueur].occurSaute ++;
                }
            }
    	
	    if(v["timerCount"]%2 == 0){
                createItem("joueur");
                createItem("joueur-dist");
	    }
        if(v["timerCount"]%25 == 0){chrono();}
    }
	
	actualizeScreen("joueur");
	actualizeScreen("joueur-dist");

    if(v["timerCount"]%625 == 0){
        $.getJSON("/lobby/extendExpire", function(d){ 
            if(c['dyn'] && (d.room.length < 2 || (!c["watch"] && !d.isPlaying))){ 
                $.get("/game/oppoLeft"); 
                alert("L'adversaire a quitté la partie. Redirection!");
                window.location.href = "/rooms";  
            } 
        });
    }
	
	if(v["bulle"].bNewMessage || v["bulle"].b1Trans){
		v["bulle"].b2Trans = false;
		v["bulle"].bVisible = false;
		v["bulle"].b1Trans = true;
		v["constantes"].incrementeWaiting = 0;
		afficherBulleTransition();
	}
    if(v["constantes"].bNewMessage){
		actualiserScroll();
	}
	if(v["bulle"].bVisible && v["bulle"].b2Trans == false){
		v["constantes"].incrementeWaiting++;
		if(v["constantes"].incrementeWaiting >= 100){
			v["bulle"].b2Trans = true;
			v["constantes"].incrementeWaiting = 0;
		}
	}
	if(v["bulle"].b2Trans == true){
		effacerBulleTransition();
	}
	if(v["weapon"].FireBullet.enable == true){
		ShotFireBullet();
	}
	
    for(J in tabJoueur)
    {
        if(v[tabJoueur[J]].waitLife && v[tabJoueur[J]].countWaitLife == v["timerCount"]){
            v[tabJoueur[J]].waitLife = false; v[tabJoueur[J]].countWaitLife = 0;
            v[tabJoueur[J]].opacity = 1;
        }
    }
    if(v["joueur"].isInvincible){ v["joueur"].invincibleTimer --;}
    if(v["joueur-dist"].isInvincible){ v["joueur-dist"].invincibleTimer --;}
    if(v["joueur"].invincibleTimer <=0){
		v["joueur"].invincibleTimer = 300; 
		v["joueur"].isInvincible = false;
		v["joueur"].hauteur = 42;
		v["joueur"].occurSaute = determineNear_occurSaute(v["joueur"].y, 42);
	}
    if(v["joueur-dist"].invincibleTimer <=0){
		v["joueur-dist"].invincibleTimer = 300; 
		v["joueur-dist"].isInvincible = false;
		v["joueur-dist"].hauteur = 42;
		v["joueur-dist"].occurSaute = determineNear_occurSaute(v["joueur-dist"].y, 42);
	}
    v["timerCount"]++;
}

function move()
{
	/*déplacement de tous les objets dans la base de données locale JS*/
    var name = new Array("item", "item-dist");
    for(Item in name){
        for (var i=v[name[Item]].length-1; i>=0; i--) {
            v[name[Item]][i].x -= 8;
            if (v[name[Item]][i].x < 0 || v[name[Item]][i].x > 880) {
                detruireItem(name[Item], i);
            }
        }
    }
    var pattern = new Array("pattern", "pattern-dist");
    for(P in pattern)
    {
        var Pa = pattern[P];
        for(Pi in v[Pa])
        {
            if(v[Pa][Pi].x != "no")
            {
                v[Pa][Pi].x -= 8;
            }
            if(v[Pa][Pi].x != "no" && v[Pa][Pi].x <= (-1*v["constantes"].matrix[v[Pa][Pi].id].col.length*16))
            {
                v[Pa][Pi].x = "no";
            }
        }
    }
    var joueur = new Array("joueur", "joueur-dist");
    for(J in joueur){
        if(v[joueur[J]].receiveNapalm){ v[joueur[J]].napalmX -= 16;}
        if(v[joueur[J]].napalmX<0){v[joueur[J]].receiveNapalm = false; v[joueur[J]].napalmX = 864;}
    }
    var weapons = new Array("weapon-recus", "weapon-recus-dist");
    for(var w in weapons){
        if(v[weapons[w]].length > 0)
        {
            for(var i in v[weapons[w]])
            {
                var It = v[weapons[w]][i];
                switch(It.type)
                {
                    case "firebullet": It.x -= 25;
                        break;
                    default : It.x -= 8;
                        break;
                }
                if(It.x < 0)
                {
                    v[weapons[w]].splice(i, 1);
                }
            }
        }
    }
    moveBackground();
}

function moveBackground()
{
   /*déplacement joueur normal */  
    v["joueur"].backgroundPos -= 8;
    if(v["joueur"].backgroundPos < -(v["constantes"]["background"][v["joueur"].backgroundId])){
        v["joueur"].backgroundPos += v["constantes"]["background"][v["joueur"].backgroundId];
    }
    v["joueur"].backgroundDom.style.backgroundPosition = v["joueur"].backgroundPos + "px";

    /*déplacement bbackground joueur adversaire*/
    v["joueur-dist"].backgroundPos -= 8;
    if(v["joueur-dist"].backgroundPos < -(v["constantes"]["background"][v["joueur-dist"].backgroundId])){
        v["joueur-dist"].backgroundPos += v["constantes"]["background"][v["joueur-dist"].backgroundId];
    }
    v["joueur-dist"].backgroundDom.style.backgroundPosition = v["joueur-dist"].backgroundPos + "px";
	
}

function actualizeScreen(joueur){
		/*fonction d'actualisation de l'écran en canvas*/
		var item, weapon;
		if(joueur == "joueur"){ item = "item"; weapon = "weapon";}
		else{ item = "item-dist"; weapon = "weapon-dist";}
		v[joueur].context.clearRect(0, 0, 880, 200);
        //if(!v["constantes"].init){block.src = '/files/images/stone.png'; v[joueur].context.drawImage(block, 0, 0, 16, 16); v["constantes"].init = true;}
		for(var i=v[item].length-1; i>=0; i--){
            var mur = new Image();
			if(v[item][i].type == "stone"){
				mur.src = '/files/images/stone.png';
			}
            else if(v[item][i].type == "fire"){
                mur.src = '/files/images/firebar.png';
            }
            else if(v[item][i].type == "heal"){
                mur.src = '/files/images/healbar.png';
            }
            else if(v[item][i].type == "shield"){
                mur.src = '/files/images/tp.png';
            }
            else if(v[item][i].type == "special"){
                mur.src = '/files/images/star.png';
            }
            else if(v[item][i].type == "napalm"){
                mur.src = '/files/images/fire_bullet.png';
            }
            else if(v[item][i].type == "fog"){
                mur.src = '/files/images/steal.png';
            }
			v[joueur].context.drawImage(mur, v[item][i].x, v[item][i].y, 16, 16);
		}
		if(v[weapon].Shield.enable){
            var shield = new Image();
			shield.src = '/files/images/shield.png';
			v[joueur].context.drawImage(shield, v["constantes"]["posX"]-10, v[joueur].y-10, 50, 60);
        }
        if(v[weapon].FireBullet.enable){
            var fire = new Image();
			fire.src = '/files/images/fire_bullet.png';
			v[joueur].context.drawImage(fire, v[weapon].FireBullet.x, v[weapon].FireBullet.y, 16, 16);
        }
        if(v[joueur].receiveNapalm ){
            var napalm = new Image();
            napalm.src = '/files/images/fire_bullet.png';
            var x = v[joueur].napalmX;
            while(x < v[joueur].napalmX+32){
                for(var y = 0; y<184; y += 16){
                    v[joueur].context.drawImage(napalm, x, y, 16, 16);
                    if((v[joueur].napalmX-12 == v["constantes"]["posX"]) && !v[joueur].isInvincible){ loserage(joueur, 75); v[joueur].opacity = 0.4;} 
                }
            x+=16;
            }

        }


        var weaponsr = new Array(); weaponsr["joueur"] = "weapon-recus"; weaponsr["joueur-dist"] = "weapon-recus-dist";
        if(v[weaponsr[joueur]].length > 0)
        {
            for(var i in v[weaponsr[joueur]])
            {
                var It = v[weaponsr[joueur]][i];
                switch(It.type)
                {
                    case "firebullet": 
                        var fireb = new Image();
                        fireb.src = '/files/images/fire_bullet.png';
                        v[joueur].context.drawImage(fireb, It.x, It.y, 16, 16);
                        break;
                }
            }
        }
        
        
        v[joueur].context.globalAlpha = v[joueur].opacity;
        var perso = new Image();
        switch (v[joueur].persoId)
        {
            case 0 :
                perso.src = '/files/images/alice.png'; break;
            case 1 :
                perso.src = '/files/images/pikachuskate.png'; break;
            case 2 :
                perso.src = '/files/images/elderwraith.png'; break;
            case 3 :
                perso.src = '/files/images/meiling.png'; break;
            case 4 :
                perso.src = '/files/images/ExtraC.png'; break;
            case 5 :
                perso.src = '/files/images/makron.png'; break;
            case 6 :
                perso.src = '/files/images/yeti.png'; break;
            case 7 :
                perso.src = '/files/images/bleubody.png'; break;
            case 8 :
                perso.src = '/files/images/blackknight.png'; break;
            case 9:
                perso.src = '/files/images/skeleton.png'; break;
            case 10:
                perso.src = '/files/images/ExtraD.png'; break;
        }
		v[joueur].context.drawImage(perso, v["constantes"]["posX"], v[joueur].y, 30, 40);
        v[joueur].context.globalAlpha = 1;
        
        
        if(v[joueur].fog){
            if(v[joueur].fogX+3706 < 0){
                v[joueur].fog = false;
            } else {
                var fog = new Image();
                fog.src = 'http://rbeuque74eu.blob.core.windows.net/files/images/fog4.png';
                v[joueur].context.drawImage(fog, v[joueur].fogX, 0, 3706, 199);
                v[joueur].fogX-=8;
            }
        }

        if(v["constantes"].isLoading.loading){
            v["joueur-dist"].context.fillRect(0, 0, 878, 199);
            v["joueur-dist"].context.font = "bold 22pt Calibri,Geneva,Arial";
            v["joueur-dist"].context.fillStyle = "silver";
            v["joueur-dist"].context.fillText("loading...", v["constantes"].isLoading.loadingX, 100);
            v["constantes"].isLoading.loadingX+=3;
            if(v["constantes"].isLoading.loadingX>880){v["constantes"].isLoading.loadingX=-100;}
            v["joueur-dist"].context.fillStyle = "white";
        }
        if(!v["constantes"].isLoading.loading && !v["constantes"].isLoading.stop){
            v["constantes"].isLoading.opacity -= 0.01;
            if(v["constantes"].isLoading.opacity <= 0){v["constantes"].isLoading.stop = true;v["constantes"].isLoading.opacity = 0;}
            v[joueur].context.globalAlpha = v["constantes"].isLoading.opacity;
            v["joueur-dist"].context.fillRect(0, 0, 878, 199);
            v["joueur-dist"].context.font = "bold 22pt Calibri,Geneva,Arial";
            v["joueur-dist"].context.fillStyle = "silver";
            v["joueur-dist"].context.fillText("GO !", v["constantes"].isLoading.loadingX, 100);
            v["constantes"].isLoading.loadingX-=3;
            v["joueur-dist"].context.fillStyle = "white";
        }
        v[joueur].context.globalAlpha = 1;
}

function chrono(){
	/*fonction permettant d'animer le chronomètre dans les instances du jeu*/
    v["constantes"].chrono.sec++;
    var inter;
    if (v["constantes"].chrono.sec > 59){ v["constantes"].chrono.sec = 0; v["constantes"].chrono.min++; }
    if(v["constantes"].chrono.min<10 && v["constantes"].chrono.sec<10){ 
        document.getElementById('chrono').innerHTML = '0' + v["constantes"].chrono.min + ':0' + v["constantes"].chrono.sec;
    }else{
        if(v["constantes"].chrono.min<10){ document.getElementById('chrono').innerHTML = '0' + v["constantes"].chrono.min + ':' + v["constantes"].chrono.sec;}
        if(v["constantes"].chrono.sec<10){ document.getElementById('chrono').innerHTML = v["constantes"].chrono.min + ':0' + v["constantes"].chrono.sec;}
    }
}